package com.maruping.disk.file.repository;

import com.maruping.disk.file.entity.SearchFileEntity;
import com.maruping.disk.mybatis.entity.PtFileEntity;
import com.maruping.disk.mybatis.flexigrid.PagingEntity;
import com.maruping.disk.mybatis.ztree.ZtreeEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface FileDao {
    /**
     * 删除文件表所有内容
     */
    void deleteFileAll();

    /**
     * 保存文件信息
     * @param ptFileEntityList
     */
    void saveFileInfo(@Param("list") List<PtFileEntity> ptFileEntityList);

    /**
     * 文件列表总数量
     * @param entity
     * @return
     */
    Integer queryFileListTotal(@Param("entity")SearchFileEntity entity);

    /**
     * 文件列表分页查询
     * @param entity
     * @param paging
     * @return
     */
    List<PtFileEntity> queryFileInfoListByPage(@Param("entity")SearchFileEntity entity, @Param("paging")PagingEntity paging);

    PtFileEntity queryFileInfoById(@Param("fileUuid") String fileUuid);

    List<PtFileEntity> queryFileListAll();


    /**
     * 查询文件完整信息（含路径），供权限设置时获取OBS文件路径
     */
    PtFileEntity queryParentFileById(@Param("fileUuid") String fileUuid);
    /**
     * 查询ACL权限树（用于前端展示可选的权限选项，如READ、WRITE等）
     *
     */
    List<ZtreeEntity> queryAclZtree();


    /**
     * 按文件名模糊查询文件（支持分页）
     *
     @param fileName
     文件名关键词
     *
     @param userUuid
     当前用户ID（仅查询用户可见文件）
     *
     @param paging
     分页参数
     *
     @return
     文件列表
     */
    List<PtFileEntity> searchFiles(
            @Param("fileName") String fileName,
            @Param("userUuid") String userUuid,
            @Param("paging") PagingEntity
                    paging
    );

    /**
     * 查询符合条件的文件总数（用于分页）
     *
     @param fileName
     文件名关键词
     *
     @param userUuid
     当前用户ID
     *
     @return
     总条数
     */
    Integer countSearchFiles(
            @Param("fileName") String fileName,
            @Param("userUuid") String
                    userUuid
    );

}
